/**
 * @file pid.h
 * @author Yifan Xiao (1993996310@qq.com)
 * @brief PID工具库
 * @version 0.1
 * @date 2022-01-25
 *
 * @copyright Copyright (c) 2022
 *
 */

/**
 * @brief 包含PID计算所需的内容
 *
 */
#ifndef __PID_H__
#define __PID_H__

#include <stdint.h>

#define K_TYPE_P  1
#define K_TYPE_I  2
#define K_TYPE_D   3
typedef struct
{
    double pre_err1;
    double pre_err2;
    double integral;
    double kp;
    double ki;
    double kd;
    double output;
    double max_output;
} PID_Data;

/**
 * @brief 计算PID，并将结果保存到结构体
 *
 * @param data
 * @param error
 */
void ist_pid_handle(PID_Data *data, double error);
/**
 * @brief 用给定的参数创建PID_Data结构体
 *
 * @param data
 * @param kp
 * @param ki
 * @param kd
 * @param time
 */
void ist_pid_create(PID_Data *data, double kp, double ki, double kd);

/**
 * @brief 设置最大值
 *
 * @param data
 * @param value
 */
void ist_pid_setmax(PID_Data *data, double value);

/*修改PID参数*/
void ist_pid_fix(PID_Data *data, uint8_t k_type, double value);

#endif
